package com.jingxuan.dto.request;

import java.util.List;

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;

import lombok.Data;

/**
 * 商品比价请求，支持上传用户行为用于偏好分析。
 */
@Data
public class CompareProductsRequest {

    /**
     * 待比价的商品ID列表。
     */
    @NotEmpty(message = "商品ID列表不能为空")
    @Size(min = 1, message = "至少需要一个商品ID")
    private List<String> productIds;

    /**
     * 当前登录用户ID，可选。
     */
    private Long userId;

    /**
     * 用户偏好标签，如果客户端已分析得到可直接上传。
     */
    private List<String> preferenceTags;

    /**
     * 原始的用户行为数据，用于在服务端进行偏好分析。
     */
    @Valid
    private List<UserBehavior> userBehaviors;

    /**
     * 用户行为数据，用于推断偏好标签。
     */
    @Data
    public static class UserBehavior {

        /**
         * 用户交互的商品类型。
         */
        @NotBlank(message = "商品类型不能为空")
        private String productType;

        /**
         * 浏览次数。
         */
        private Integer viewCount;

        /**
         * 加购次数。
         */
        private Integer cartCount;

        /**
         * 购买次数。
         */
        private Integer purchaseCount;

        /**
         * 对应的消费金额。
         */
        private Double spendAmount;
    }
}
